home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 34.zip / BS1 part 34 / GFA basic training.adf / Requester / EDIT_WINDOW.LST < prev    next >
File List  |  1989-06-01  |  10KB  |  311 lines

  1. @aufruf
  2. > PROCEDURE aufruf
  3.   n|=5
  4.   DIM text$(n|)
  5.   text$(1)="Name"
  6.   text$(2)="Vorname"
  7.   text$(3)="Straße"
  8.   text$(4)="Postleitzahl"
  9.   text$(5)="Stadt"
  10.   PRINT "0123456789"
  11.   PRINT "0123456789"
  12.   PRINT "0123456789"
  13.   PRINT "0123456789"
  14.   GET 0,0,80,32,grafik$
  15.   CLS
  16.   FOR j=1 TO 5
  17.     FOR i=1 TO 6
  18.       PUT i*80,j*32,grafik$
  19.     NEXT i
  20.   NEXT j
  21.   edit_box(100,35,"Geben Sie nun Ihre Adresse ein!",90,35,n|,text$())
  22.   '
  23.   FOR i=1 TO n|
  24.     PRINT edit$(i),LEN(edit$(i))
  25.   NEXT i
  26.   '
  27.   REPEAT
  28.   UNTIL MOUSEK=1 OR INKEY$=CHR$(13)
  29. RETURN
  30. '
  31. > PROCEDURE edit_box(x%,y|,u$,g_x%,g_y|,n|,VAR text$())
  32.   LOCAL ma|,t_breite%,u_breite%,f_breite%,b_breite%,b_hÖhe%,hintergrund$
  33.   LOCAL i|,j|,e_x%,e_y|,ex%,xl1%,xl2%,yl1|,yl2|,xr1%,xr2%,yr1|,yr2|,char|
  34.   LOCAL zeichen&,zeile|,spalte|,taste$,taste|,ende!,cursor$,rechts|,abbruch!
  35.   DIM edit$(n|),edit|(n|,100),zeiger_c|(n|),zeiger_z|(SUCC(n|))
  36.   abbruch!=FALSE
  37.   ende!=FALSE
  38.   '
  39.   ma|=LEN(text$(1))
  40.   FOR i|=2 TO n|
  41.     ma|=MAX(ma|,LEN(text$(i|)))
  42.   NEXT i|
  43.   MUL ma|,8
  44.   '
  45.   t_breite%=10+ma|+16+15*8+10
  46.   u_breite%=LEN(u$)*8
  47.   f_breite%=2*144+8+30
  48.   b_breite%=MAX(t_breite%,u_breite%+10,f_breite%+30,g_x%+10)
  49.   b_hÖhe%=10+g_y|+n|*12+12+20                 !geändert
  50.   '
  51.   OPENW #0
  52.   OPENW #1,x%,y|,b_breite%+10,b_hÖhe%+15,&H4008,&H1002
  53.   COLOR 1
  54.   z$=SPACE$(((b_breite%+10)/8-LEN(u$))/2)
  55.   TITLEW #1,z$+u$+z$
  56.   '
  57.   x%=0
  58.   y|=10
  59.   BOX x%,y|,x%+b_breite%+6,y|+b_hÖhe%+4
  60.   BOX x%+3,y|+2,x%+b_breite%+3,y|+b_hÖhe%+2
  61.   ADD x%,3
  62.   ADD y|,2
  63.   '
  64.   IF g_x%>0
  65.     PUT x%+b_breite%/2-g_x%/2,y|+10,grafik$
  66.   ENDIF
  67.   '
  68.   e_y|=y|+5+g_y|+13
  69.   e_x%=x%+10+ma|+15
  70.   FOR i|=0 TO n|-1
  71.     TEXT x%+10,e_y|+i|*12,text$(i|+1)+":"
  72.   NEXT i|
  73.   '
  74.   ADD e_y|,2
  75.   FOR i|=0 TO n|-1
  76.     ex%=e_x%
  77.     REPEAT
  78.       INC zeichen&
  79.       TEXT ex%,e_y|+i|*12,"_"
  80.       ADD ex%,9
  81.     UNTIL ex%>x%+b_breite%-18
  82.   NEXT i|
  83.   DIV zeichen&,n|
  84.   SUB e_y|,2
  85.   '
  86.   xl1%=x%+10
  87.   xl2%=x%+154
  88.   yl1|=y|+b_hÖhe%-22
  89.   yl2|=y|+b_hÖhe%-10
  90.   xr1%=x%+b_breite%-164
  91.   xr2%=x%+b_breite%-10
  92.   yr1|=y|+b_hÖhe%-22
  93.   yr2|=y|+b_hÖhe%-10
  94.   '
  95.   BOX xl1%,yl1|,xl2%,yl2|
  96.   BOX xr1%,yr1|,xr2%,yr2|
  97.   TEXT xl1%+4,yl2|-3,"Eingabe abbrechen"
  98.   TEXT xr1%+4,yl2|-3,"Eingabe bestätigen"
  99.   '
  100.   COLOR 3
  101.   PBOX e_x%,e_y|-7,e_x%+7,e_y|+1
  102.   GET e_x%,e_y|-7,e_x%+7,e_y|+1,cursor$
  103.   COLOR 1
  104.   zeile|=1
  105.   spalte|=1
  106.   e_box
  107.   PUT x%-3,y|-2,hintergrund$
  108.   '
  109.   IF NOT abbruch!
  110.     FOR i|=1 TO n|
  111.       IF zeiger_z|(i|)
  112.         FOR j|=0 TO PRED(zeiger_z|(i|))
  113.           edit$(i|)=edit$(i|)+CHR$(edit|(i|,j|))
  114.         NEXT j|
  115.       ENDIF
  116.     NEXT i|
  117.   ENDIF
  118.   '
  119.   ERASE edit|(),zeiger_c|(),zeiger_z|()
  120. RETURN
  121. > PROCEDURE e_box
  122.   REPEAT
  123.     taste$=INKEY$
  124.     IF MOUSEX>xl1% AND MOUSEX<xl2% AND MOUSEY>yl1| AND MOUSEY<yl2| AND MOUSEK=1
  125.       abbruch!=TRUE
  126.       ende!=TRUE
  127.     ELSE IF MOUSEX>xr1% AND MOUSEX<xr2% AND MOUSEY>yr1| AND MOUSEY<yr2| AND MOUSEK=1
  128.       ende!=TRUE
  129.     ELSE IF taste$<>""
  130.       IF LEN(taste$)=1
  131.         taste|=ASC(taste$)
  132.       ELSE IF LEN(taste$)=2
  133.         taste|=ASC(RIGHT$(taste$))
  134.         SUB taste|,64
  135.       ELSE IF LEN(taste$)>2
  136.         taste|=0
  137.       ENDIF
  138.       SELECT taste|
  139.       CASE 1 !Cursor up
  140.         IF zeile|>1
  141.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  142.           DEC zeile|
  143.           IF zeiger_z|(zeile|)<zeichen&
  144.             spalte|=MIN(SUCC(zeiger_z|(zeile|)),spalte|)
  145.             zeiger_c|(zeile|)=PRED(spalte|)
  146.           ELSE
  147.             @eintrag_neu
  148.           ENDIF
  149.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  150.         ENDIF
  151.       CASE 2 !Cursor down
  152.         IF zeile|<n|
  153.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  154.           INC zeile|
  155.           IF zeiger_z|(zeile|)<zeichen&
  156.             spalte|=MIN(SUCC(zeiger_z|(zeile|)),spalte|)
  157.             zeiger_c|(zeile|)=PRED(spalte|)
  158.           ELSE
  159.             @eintrag_neu
  160.           ENDIF
  161.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  162.         ENDIF
  163.       CASE 3 !Cursor right
  164.         IF zeiger_c|(zeile|)<zeiger_z|(zeile|)
  165.           IF spalte|<zeichen& AND spalte|<=zeiger_z|(zeile|)
  166.             ' Cursor vor Text und Feldende
  167.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  168.             INC spalte|
  169.             INC zeiger_c|(zeile|)
  170.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  171.           ELSE IF spalte|=zeichen& AND zeiger_c|(zeile|)<zeiger_z|(zeile|)
  172.             ' Cursor am Feldende und vor Textende
  173.             @shift(2,PRED(zeichen&),1,edit|(zeile|,zeiger_c|(zeile|)),PRED(zeichen&))
  174.             DEC rechts|
  175.             INC zeiger_c|(zeile|)
  176.           ENDIF
  177.         ENDIF
  178.       CASE 4 !Cursor left
  179.         IF spalte|>1
  180.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  181.           DEC spalte|
  182.           DEC zeiger_c|(zeile|)
  183.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  184.         ELSE IF spalte|=1 AND zeiger_c|(zeile|)>0
  185.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  186.           @shift(1,zeichen&-2,2,edit|(zeile|,PRED(zeiger_c|(zeile|))),1)
  187.           DEC zeiger_c|(zeile|)
  188.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  189.           IF zeiger_z|(zeile|)-zeiger_c|(zeile|)>=zeichen&
  190.             INC rechts|
  191.           ENDIF
  192.         ENDIF
  193.       CASE 13
  194.         IF zeile|=n|
  195.           ende!=TRUE
  196.         ELSE
  197.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  198.           INC zeile|
  199.           IF zeiger_z|(zeile|)<zeichen&
  200.             spalte|=1
  201.             zeiger_c|(zeile|)=0
  202.           ELSE
  203.             @eintrag_neu
  204.           ENDIF
  205.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  206.         ENDIF
  207.       CASE 8 !Backspace
  208.         IF spalte|>1 AND spalte|<zeichen&
  209.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  210.           IF rechts|
  211.             char|=edit|(zeile|,zeiger_z|(zeile|)-rechts|)
  212.             DEC rechts|
  213.           ELSE
  214.             char|=32
  215.           ENDIF
  216.           position|=PRED(zeichen&)
  217.           @shift(spalte|,PRED(zeichen&),PRED(spalte|),char|,position|)
  218.           @entf(zeile|,PRED(zeiger_c|(zeile|)),zeiger_z|(zeile|),edit|())
  219.           DEC zeiger_c|(zeile|)
  220.           DEC zeiger_z|(zeile|)
  221.           DEC spalte|
  222.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  223.         ENDIF
  224.       CASE 127 !Delete
  225.         IF spalte|<zeichen& AND zeiger_z|(zeile|)>zeiger_c|(zeile|)
  226.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  227.           IF rechts|
  228.             char|=edit|(zeile|,zeiger_z|(zeile|)-rechts|)
  229.             DEC rechts|
  230.           ELSE
  231.             char|=32
  232.           ENDIF
  233.           position|=PRED(zeichen&)
  234.           @shift(SUCC(spalte|),zeichen&-1,spalte|,char|,position|)
  235.           @entf(zeile|,zeiger_c|(zeile|),zeiger_z|(zeile|),edit|())
  236.           DEC zeiger_z|(zeile|)
  237.           PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  238.         ENDIF
  239.         '
  240.       CASE 32 TO 126,196 TO 252
  241.         IF zeiger_z|(zeile|)<100
  242.           IF zeiger_c|(zeile|)=zeiger_z|(zeile|) AND spalte|=zeichen&
  243.             ' Cursor am Textende und am Feldende
  244.             @shift(2,PRED(zeichen&),1,taste|,PRED(zeichen&))
  245.             edit|(zeile|,zeiger_z|(zeile|))=taste|
  246.           ELSE IF zeiger_c|(zeile|)=zeiger_z|(zeile|) AND spalte|<zeichen&
  247.             ' Cursor am Textende und vor Feldende
  248.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  249.             TEXT e_x%+PRED(spalte|)*9,(e_y|)+PRED(zeile|)*12,CHR$(taste|)
  250.             INC spalte|
  251.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  252.             edit|(zeile|,zeiger_z|(zeile|))=taste|
  253.           ELSE IF zeiger_c|(zeile|)<zeiger_z|(zeile|) AND spalte|=PRED(zeichen&)
  254.             ' Cursor im Text und am Feldende
  255.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  256.             @shift(2,PRED(spalte|),1,taste|,PRED(spalte|))
  257.             @einf(zeile|,zeiger_c|(zeile|),zeiger_z|(zeile|),taste|,edit|())
  258.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  259.           ELSE IF zeiger_c|(zeile|)<zeiger_z|(zeile|) AND spalte|<zeichen&
  260.             ' Cursor im Text und vor Feldende
  261.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  262.             @shift(spalte|,zeichen&-2,SUCC(spalte|),taste|,spalte|)
  263.             INC spalte|
  264.             PUT e_x%+PRED(spalte|)*9,(e_y|-7)+PRED(zeile|)*12,cursor$,80
  265.             @einf(zeile|,zeiger_c|(zeile|),zeiger_z|(zeile|),taste|,edit|())
  266.             IF zeiger_z|(zeile|)-zeiger_c|(zeile|)+spalte|>zeichen&
  267.               INC rechts|
  268.             ENDIF
  269.           ENDIF
  270.           INC zeiger_c|(zeile|)
  271.           INC zeiger_z|(zeile|)
  272.         ENDIF
  273.       ENDSELECT
  274.     ENDIF
  275.   UNTIL ende!=TRUE
  276.   CLOSEW #1
  277. RETURN
  278. > PROCEDURE eintrag_neu
  279.   spalte|=1
  280.   zeiger_c|(zeile|)=0
  281.   DEFFILL 0
  282.   PBOX e_x%,e_y|-8+PRED(zeile|)*12,e_x%+9*zeichen&,e_y|+2+PRED(zeile|)*12
  283.   DEFFILL 1
  284.   SUB zeichen&,2
  285.   FOR i|=0 TO zeichen&
  286.     TEXT e_x%+i|*9,e_y|+PRED(zeile|)*12,CHR$(edit|(zeile|,i|))
  287.   NEXT i|
  288.   ADD zeichen&,2
  289.   rechts|=zeiger_z|(zeile|)-PRED(zeichen&)
  290. RETURN
  291. > PROCEDURE shift(erster|,letzter|,neu|,char|,position|)
  292.   GET e_x%+PRED(erster|)*9,e_y|-7+PRED(zeile|)*12,e_x%-1+letzter|*9,e_y|+1+PRED(zeile|)*12,rettung$
  293.   PUT e_x%+PRED(neu|)*9,e_y|-7+PRED(zeile|)*12,rettung$
  294.   TEXT e_x%+PRED(position|)*9,e_y|+PRED(zeile|)*12,CHR$(char|)
  295. RETURN
  296. > PROCEDURE entf(z|,s|,bis|,VAR a|())
  297.   REPEAT
  298.     a|(z|,s|)=a|(z|,SUCC(s|))
  299.     INC s|
  300.   UNTIL s|=>bis|
  301.   a|(z|,bis|)=0
  302. RETURN
  303. > PROCEDURE einf(z|,s|,bis|,wert_n|,VAR a|())
  304.   REPEAT
  305.     wert_a|=a|(z|,s|)
  306.     a|(z|,s|)=wert_n|
  307.     wert_n|=wert_a|
  308.     INC s|
  309.   UNTIL s|>bis|
  310. RETURN
  311.